<?php

namespace Medicina\BackendBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;

class ConcursoType extends AbstractType {

    public function getDefaultOptions(array $options) {
        return array(
            'isNew' => false,
            'data_class' => 'Medicina\KernelBundle\Entity\Concurso',
            'cargos' => array(),
            'catedraId' => "all",
            'isCargoAjax' => false,
            'permisos'=>array(),
            'estaImpugnado' =>false
        );
    }

    public function buildForm(FormBuilder $builder, array $options) {

        
        $catedraId = $options['catedraId'];
        if ($options['isCargoAjax']) {
            $builder->add('cargos', 'entity', array('by_reference' => false, 'class' => 'Medicina\KernelBundle\Entity\Cargo', 'multiple' => true,
                'query_builder' => function($er) use ($catedraId) {
                    $consulta = $er->createQueryBuilder('c');
                    if (is_numeric($catedraId)) {
                        $consulta->where('c.catedra = :catedraId')->setParameter('catedraId', $catedraId);
                    }
                    $consulta->orderBy('c.id', 'ASC');
                    return $consulta;
                },
            ));
        } else {

            if ($options['isNew']) {
                $setAsReadOnly = array();
                $setAsReadOnlyCargos = array('disabled' => 'disabled');
            } else {
                $setAsReadOnly = array('disabled' => 'disabled');
                $setAsReadOnlyCargos = array();
            }            
             if ($options['permisos']['general'] && !$options['estaImpugnado']) {
            //dibujo el form de general            
            $builder
                    ->add('fechaInicioExpediente', 'date', array(
                        'widget' => 'single_text',
                        'format' => 'dd/MM/yyyy',
                        'attr' => array('class' => 'date'),
                        'label' => "Fecha de Inicio"
                    ))
                    ->add('fechaCierre', 'date', array(
                        'widget' => 'single_text',
                        'format' => 'dd/MM/yyyy',
                        'attr' => array('class' => 'date'),
                        'label' => "Fecha de Cierre",'required' => false
                    ))
                    ->add('fechaInicioInscripcion', 'date', array(
                        'widget' => 'single_text',
                        'format' => 'dd/MM/yyyy',
                        'attr' => array('class' => 'date'),
                        'label' => "Fecha de Inicio Inscripción", 'required' => false,
                    ))
                    ->add('fechaEvaluacion', 'date', array(
                        'widget' => 'single_text',
                        'format' => 'dd/MM/yyyy',
                        'attr' => array('class' => 'date'),
                        'label' => "Fecha de Evaluación", 'required' => false,
                    ))
                    ->add('fechaEntregaActa', 'date', array(
                        'widget' => 'single_text',
                        'format' => 'dd/MM/yyyy',
                        'attr' => array('class' => 'date'),
                        'label' => "Fecha de Entrega del Acta", 'required' => false,
                    ))
                    ->add('numeroExpediente', 'text', array('attr' => array('class' => 'expediente')))
                    ->add('catedra', 'entity', array('class' => 'Medicina\KernelBundle\Entity\Catedra', 'attr' => $setAsReadOnly))

                    ->add('cargos', 'entity', array('by_reference' => false, 'class' => 'Medicina\KernelBundle\Entity\Cargo',
                'attr' => $setAsReadOnlyCargos, 'multiple' => true,
                'query_builder' => function($er) use ($catedraId) {
                    $consulta = $er->createQueryBuilder('c');
                    if (is_numeric($catedraId)) {
                        $consulta->where('c.catedra = :catedraId')->setParameter('catedraId', $catedraId);
                    }
                    $consulta->orderBy('c.id', 'ASC');
                    return $consulta;
                },
            ));

            } 
            $builder->add('oficina', 'entity', array('class' => 'Medicina\KernelBundle\Entity\Oficina'));
             
             if ($options['permisos']['inscriptos'] && !$options['estaImpugnado']) {
                 //dibujo el form de inscriptos            
                 $builder
                    ->add('inscriptos', 'collection', array(
                        'type' => new \Medicina\BackendBundle\Form\PersonaInscriptaType,
                        'allow_add' => true,
                        'allow_delete' => true,
                        'required' => false,
                        'by_reference' => false,
                        'prototype' => true,
                        'label' => 'Inscriptos',
                    ));
                 
             }
             if ($options['permisos']['asesores'] && !$options['estaImpugnado']) {
                 //dibujo el form de asesores            
                 $builder
                    ->add('asesores', 'collection', array(
                        'type' => new \Medicina\BackendBundle\Form\PersonaAsesoraType,
                        'allow_add' => true,
                        'allow_delete' => true,
                        'required' => false,
                        'by_reference' => false,
                        'prototype' => true,
                        'label' => 'Inscriptos',
                    ));
                 
             }
             if ($options['permisos']['resoluciones'] && !$options['estaImpugnado']) {
                 //dibujo el form de resoluciones            
                 $builder
                     ->add('resoluciones', 'collection', array(
                        'type' => new \Medicina\BackendBundle\Form\ResolucionType,
                        'allow_add' => true,
                        'allow_delete' => true,
                        'required' => false,
                        'by_reference' => false,
                        'prototype' => true,
                        'label' => 'Inscriptos',
                    ));
                 
             }
             if ($options['permisos']['impugnaciones']) {
                 //dibujo el form de impugnaciones            
                 $builder
                    ->add('impugnaciones', 'collection', array(
                        'type' => new \Medicina\BackendBundle\Form\ImpugnacionType,
                        'allow_add' => true,
                        'allow_delete' => true,
                        'required' => false,
                        'by_reference' => false,
                        'prototype' => true,
                        'label' => 'Impugnaciones',
                    ));                
             }    
        }
    }

    public function getName() {
        return 'ConcursoType';
    }

}
